// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

import QtQuick
import Shared

/*基础上GamePage.qml，所以有errorMessage,infoMessage。
  有1个title，1个ListView和2个GameButton。
*/
GamePage {

    errorMessage: deviceFinder.error        //GamePage.qml原有的。
    infoMessage: deviceFinder.info          //GamePage.qml原有的。

    /*QQ会重载吗？
    */
    function init()
    {

    }

    Rectangle {
        id: viewContainer
        anchors.top: parent.top
        anchors.bottom:
            // only BlueZ platform has address type selection
            connectionHandler.requiresAddressType ? addressTypeButton.top : searchButton.top        //直接使用connectionHandler。
        anchors.topMargin: GameSettings.fieldMargin + messageHeight
        anchors.bottomMargin: GameSettings.fieldMargin
        anchors.horizontalCenter: parent.horizontalCenter
        width: parent.width - GameSettings.fieldMargin*2
        color: GameSettings.viewColor
        radius: GameSettings.buttonRadius


        Text {
            id: title
            width: parent.width
            height: GameSettings.fieldHeight
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            color: GameSettings.textColor
            font.pixelSize: GameSettings.mediumFontSize
            text: qsTr("FOUND DEVICES")

            BottomLine {
                height: 1;                  //QQ直接覆盖了BottomLine之height默认值。
                width: parent.width
                color: "#898989"
            }
        }


        ListView {
            id: devices
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.bottom: parent.bottom
            anchors.top: title.bottom
            model: deviceFinder.devices         //数据源，即Q_PROPERTY(QVariant devices READ devices NOTIFY devicesChanged)。QList<QObject*>。
            //model: deviceFinder.bin_list        //!!输入“.”后，无自动提示。
            clip: true
            highlightFollowsCurrentItem: true
            highlight:  Rectangle{            //无作用
                            color: "red"
                        }

            delegate: Rectangle {
                id: box
                height:GameSettings.fieldHeight * 1.2
                width: devices.width
                color: index % 2 === 0 ? GameSettings.delegate1Color : GameSettings.delegate2Color  //index是ListView的属性。问题是一显示就分了颜色，这个操作什么时候进行的？
                property int idx: devices.currentIndex      //看到过这样的代码，中转一下。可这里也没有实际效果。


                MouseArea {
                anchors.fill: parent
                    onClicked: {
                        //输出所选文件的绝对路径：
                        //emit deviceFinder.bin_nameChanged();
//                        console.log(deviceFinder.bin_dir+"/"+modelData);
//                        console.log(123);
//                        deviceFinder.bin_name= deviceFinder.bin_dir+"/"+modelData;      //全文件名

//                        console.log(deviceFinder.bin_name);
//                        //console.log(devices.view.currentIndex);
//                        console.log(index);                 //这个是对的，为什么？ devices.index未定义，box.index未定义, currentIndx为not defined.
//                        console.log(devices.count);

                        deviceFinder.connectToService(modelData.deviceAddress);                     //点击就执行连接相应的设备。
                        app.showPage("Measure.qml")
                        //box.idx= 10;
                        devices.currentIndex= index;
                        console.log(devices.currentIndex);

                        //执行文件打开操作，参数是列表索引值。
                        //deviceFinder.openfile(index);
                    }
                }

                Text {
                    id: device
                    font.pixelSize: GameSettings.smallFontSize
                    text: modelData.deviceName      //modelData是数据源的当前数据。数据类型是class DeviceInfo。（但需转换为QVariant，不能是DeviceInfo，因为后者在QML不识别，理解对吗？QQ）。
                    //text: modelData                 //!!写modelData.value，modelData.value()都不对，不显示。直接使用modelData，显然modelData是string类型（对应C++的QString）。
                    anchors.top: parent.top
                    anchors.topMargin: parent.height * 0.1
                    anchors.leftMargin: parent.height * 0.1
                    anchors.left: parent.left
                    color: GameSettings.textColor
                }

//                Text {
//                    id: deviceAddress
//                    font.pixelSize: GameSettings.smallFontSize
//                    text: modelData.deviceAddress
//                    anchors.bottom: parent.bottom
//                    anchors.bottomMargin: parent.height * 0.1
//                    anchors.rightMargin: parent.height * 0.1
//                    anchors.right: parent.right
//                    color: Qt.darker(GameSettings.textColor)
//                }
            }
        }
    }

    GameButton {
        id: addressTypeButton
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.bottom: searchButton.top
        anchors.bottomMargin: GameSettings.fieldMargin*0.5
        width: viewContainer.width
        height: GameSettings.fieldHeight
        visible: connectionHandler.requiresAddressType // only required on BlueZ
        state: "public"
        onClicked: state == "public" ? state = "random" : state = "public"      //GameButton.qml中的信号clicked。

        states: [   //QQ没看懂这块。
            State {
                name: "public"
                PropertyChanges { target: addressTypeText; text: qsTr("Public Address") }
                PropertyChanges { target: deviceHandler; addressType: AddressType.PublicAddress }
            },
            State {
                name: "random"
                PropertyChanges { target: addressTypeText; text: qsTr("Random Address") }
                PropertyChanges { target: deviceHandler; addressType: AddressType.RandomAddress }
            }
        ]

        Text {  //文件显示，由上面的states决定：要么显示"Public Address"，要么显示"Random Address"。
            id: addressTypeText
            anchors.centerIn: parent
            font.pixelSize: GameSettings.tinyFontSize
            color: GameSettings.textColor
        }
    }

    GameButton {
        id: searchButton
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.bottom: parent.bottom
        anchors.bottomMargin: GameSettings.fieldMargin
        width: viewContainer.width
        height: GameSettings.fieldHeight
        enabled: !deviceFinder.scanning
        onClicked: deviceFinder.startSearch()       //会执行，但执行结果会对GUI有什么影响呢？

        Text {  //新增的文本，没理解这种已有的控件，再在内部增加控件的方法。
            anchors.centerIn: parent
            font.pixelSize: GameSettings.tinyFontSize
            text: qsTr("START SEARCH")
            color: searchButton.enabled ? GameSettings.textColor : GameSettings.disabledTextColor
        }
    }
}
